package com.whosly.action.log.data;

import lombok.*;

import java.io.Serializable;
import java.util.Map;

@Getter
@Setter
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ActionData implements Serializable {

    //#############################################
    //                server
    //#############################################
    /**
     * 用户 userId
     */
    private String userId;

    /**
     * 用户行为
     */
    private String actionName;

    /**
     * 发生类
     */
    private String actionClassName;

    /**
     * 发生类的方法
     */
    private String actionMethodName;

    /**
     * 发生时间, 格式 yyyy-MM-dd HH:mm:ss
     */
    private String actionTime;

    /**
     * 入参
     */
    private Map parameters;

    /**
     * 总耗时， 单位毫秒
     */
    private Long timeMillis;

    /**
     * 业务方法体耗时， 单位毫秒
     */
    private Long timeMethodMillis;

    /**
     * 发生的服务器IP
     */
    private String serverIp;

    /**
     * 发生类型
     */
    private ActionHandlerType actionHandlerType;

    /**
     * 如果为 http controller 请求对象，client web
     */
    private Web web = Web.builder().build();

    /**
     * 如果为 dubbo 请求对象，client dubbo
     */
    private Dubbo dubbo = Dubbo.builder().build();


    /**
     * 如果是 http controller 请求对象，client web
     */
    @Getter
    @Setter
    @ToString
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Web{
        /**
         * http 请求地址， 如果存在
         */
        private String path;

        /**
         * 客户端IP， 如果存在
         */
        private String clientIp;

    }

    /**
     * 如果是 dubbo 请求对象，client dubbo
     */
    @Getter
    @Setter
    @ToString
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Dubbo {
        /**
         * 版本
         */
        private String version;
    }

}
